//============================================================================
//
// This file is part of the Thea toolkit.
//
// This software is distributed under the BSD license, as detailed in the
// accompanying LICENSE.txt file. Portions are derived from other works:
// their respective licenses and copyright information are reproduced in
// LICENSE.txt and/or in the relevant source files.
//
// Author: Siddhartha Chaudhuri
// First version: 2011
//
//============================================================================

#include "Math.hpp"

namespace Thea {
namespace Math {
namespace MathInternal {

// Trigonometric table. Each row is sin/cos/tan.
float const TRIG_TABLE[NUM_TRIG_STEPS + 1][3] = {
  { 0.00000000f, 1.00000000f, 0.00000000f },
  { 0.00613588f, 0.99998118f, 0.00613600f },
  { 0.01227154f, 0.99992470f, 0.01227246f },
  { 0.01840673f, 0.99983058f, 0.01840985f },
  { 0.02454123f, 0.99969882f, 0.02454862f },
  { 0.03067480f, 0.99952942f, 0.03068924f },
  { 0.03680722f, 0.99932238f, 0.03683218f },
  { 0.04293826f, 0.99907773f, 0.04297789f },
  { 0.04906767f, 0.99879546f, 0.04912685f },
  { 0.05519524f, 0.99847558f, 0.05527951f },
  { 0.06132074f, 0.99811811f, 0.06143635f },
  { 0.06744392f, 0.99772307f, 0.06759784f },
  { 0.07356456f, 0.99729046f, 0.07376443f },
  { 0.07968244f, 0.99682030f, 0.07993661f },
  { 0.08579731f, 0.99631261f, 0.08611485f },
  { 0.09190896f, 0.99576741f, 0.09229962f },
  { 0.09801714f, 0.99518473f, 0.09849140f },
  { 0.10412163f, 0.99456457f, 0.10469067f },
  { 0.11022221f, 0.99390697f, 0.11089791f },
  { 0.11631863f, 0.99321195f, 0.11711360f },
  { 0.12241068f, 0.99247953f, 0.12333824f },
  { 0.12849811f, 0.99170975f, 0.12957230f },
  { 0.13458071f, 0.99090264f, 0.13581628f },
  { 0.14065824f, 0.99005821f, 0.14207068f },
  { 0.14673047f, 0.98917651f, 0.14833599f },
  { 0.15279719f, 0.98825757f, 0.15461271f },
  { 0.15885814f, 0.98730142f, 0.16090136f },
  { 0.16491312f, 0.98630810f, 0.16720244f },
  { 0.17096189f, 0.98527764f, 0.17351646f },
  { 0.17700422f, 0.98421009f, 0.17984394f },
  { 0.18303989f, 0.98310549f, 0.18618540f },
  { 0.18906866f, 0.98196387f, 0.19254137f },
  { 0.19509032f, 0.98078528f, 0.19891237f },
  { 0.20110463f, 0.97956977f, 0.20529894f },
  { 0.20711138f, 0.97831737f, 0.21170162f },
  { 0.21311032f, 0.97702814f, 0.21812096f },
  { 0.21910124f, 0.97570213f, 0.22455751f },
  { 0.22508391f, 0.97433938f, 0.23101182f },
  { 0.23105811f, 0.97293995f, 0.23748445f },
  { 0.23702361f, 0.97150389f, 0.24397597f },
  { 0.24298018f, 0.97003125f, 0.25048696f },
  { 0.24892761f, 0.96852209f, 0.25701799f },
  { 0.25486566f, 0.96697647f, 0.26356966f },
  { 0.26079412f, 0.96539444f, 0.27014255f },
  { 0.26671276f, 0.96377607f, 0.27673727f },
  { 0.27262136f, 0.96212140f, 0.28335442f },
  { 0.27851969f, 0.96043052f, 0.28999463f },
  { 0.28440754f, 0.95870347f, 0.29665850f },
  { 0.29028468f, 0.95694034f, 0.30334668f },
  { 0.29615089f, 0.95514117f, 0.31005981f },
  { 0.30200595f, 0.95330604f, 0.31679853f },
  { 0.30784964f, 0.95143502f, 0.32356349f },
  { 0.31368174f, 0.94952818f, 0.33035538f },
  { 0.31950203f, 0.94758559f, 0.33717485f },
  { 0.32531029f, 0.94560733f, 0.34402260f },
  { 0.33110631f, 0.94359346f, 0.35089932f },
  { 0.33688985f, 0.94154407f, 0.35780572f },
  { 0.34266072f, 0.93945922f, 0.36474251f },
  { 0.34841868f, 0.93733901f, 0.37171042f },
  { 0.35416353f, 0.93518351f, 0.37871019f },
  { 0.35989504f, 0.93299280f, 0.38574257f },
  { 0.36561300f, 0.93076696f, 0.39280831f },
  { 0.37131719f, 0.92850608f, 0.39990820f },
  { 0.37700741f, 0.92621024f, 0.40704302f },
  { 0.38268343f, 0.92387953f, 0.41421356f },
  { 0.38834505f, 0.92151404f, 0.42142065f },
  { 0.39399204f, 0.91911385f, 0.42866511f },
  { 0.39962420f, 0.91667906f, 0.43594778f },
  { 0.40524131f, 0.91420976f, 0.44326951f },
  { 0.41084317f, 0.91170603f, 0.45063119f },
  { 0.41642956f, 0.90916798f, 0.45803368f },
  { 0.42200027f, 0.90659570f, 0.46547791f },
  { 0.42755509f, 0.90398929f, 0.47296478f },
  { 0.43309382f, 0.90134885f, 0.48049523f },
  { 0.43861624f, 0.89867447f, 0.48807021f },
  { 0.44412214f, 0.89596625f, 0.49569071f },
  { 0.44961133f, 0.89322430f, 0.50335770f },
  { 0.45508359f, 0.89044872f, 0.51107220f },
  { 0.46053871f, 0.88763962f, 0.51883523f },
  { 0.46597650f, 0.88479710f, 0.52664786f },
  { 0.47139674f, 0.88192126f, 0.53451114f },
  { 0.47679923f, 0.87901223f, 0.54242616f },
  { 0.48218377f, 0.87607009f, 0.55039406f },
  { 0.48755016f, 0.87309498f, 0.55841595f },
  { 0.49289819f, 0.87008699f, 0.56649300f },
  { 0.49822767f, 0.86704625f, 0.57462640f },
  { 0.50353838f, 0.86397286f, 0.58281737f },
  { 0.50883014f, 0.86086694f, 0.59106712f },
  { 0.51410274f, 0.85772861f, 0.59937693f },
  { 0.51935599f, 0.85455799f, 0.60774810f },
  { 0.52458968f, 0.85135519f, 0.61618193f },
  { 0.52980362f, 0.84812034f, 0.62467977f },
  { 0.53499762f, 0.84485357f, 0.63324302f },
  { 0.54017147f, 0.84155498f, 0.64187306f },
  { 0.54532499f, 0.83822471f, 0.65057136f },
  { 0.55045797f, 0.83486287f, 0.65933938f },
  { 0.55557023f, 0.83146961f, 0.66817864f },
  { 0.56066158f, 0.82804505f, 0.67709067f },
  { 0.56573181f, 0.82458930f, 0.68607707f },
  { 0.57078075f, 0.82110251f, 0.69513944f },
  { 0.57580819f, 0.81758481f, 0.70427946f },
  { 0.58081396f, 0.81403633f, 0.71349882f },
  { 0.58579786f, 0.81045720f, 0.72279925f },
  { 0.59075970f, 0.80684755f, 0.73218255f },
  { 0.59569930f, 0.80320753f, 0.74165055f },
  { 0.60061648f, 0.79953727f, 0.75120511f },
  { 0.60551104f, 0.79583690f, 0.76084816f },
  { 0.61038281f, 0.79210658f, 0.77058167f },
  { 0.61523159f, 0.78834643f, 0.78040766f },
  { 0.62005721f, 0.78455660f, 0.79032821f },
  { 0.62485949f, 0.78073723f, 0.80034545f },
  { 0.62963824f, 0.77688847f, 0.81046156f },
  { 0.63439328f, 0.77301045f, 0.82067879f },
  { 0.63912444f, 0.76910334f, 0.83099944f },
  { 0.64383154f, 0.76516727f, 0.84142588f },
  { 0.64851440f, 0.76120239f, 0.85196055f },
  { 0.65317284f, 0.75720885f, 0.86260593f },
  { 0.65780669f, 0.75318680f, 0.87336461f },
  { 0.66241578f, 0.74913639f, 0.88423922f },
  { 0.66699992f, 0.74505779f, 0.89523247f },
  { 0.67155895f, 0.74095113f, 0.90634717f },
  { 0.67609270f, 0.73681657f, 0.91758618f },
  { 0.68060100f, 0.73265427f, 0.92895247f },
  { 0.68508367f, 0.72846439f, 0.94044908f },
  { 0.68954054f, 0.72424708f, 0.95207915f },
  { 0.69397146f, 0.72000251f, 0.96384589f },
  { 0.69837625f, 0.71573083f, 0.97575265f },
  { 0.70275474f, 0.71143220f, 0.98780284f },
  { 0.70710678f, 0.70710678f, 1.00000000f },
  { 0.71143220f, 0.70275474f, 1.01234777f },
  { 0.71573083f, 0.69837625f, 1.02484989f },
  { 0.72000251f, 0.69397146f, 1.03751026f },
  { 0.72424708f, 0.68954054f, 1.05033285f },
  { 0.72846439f, 0.68508367f, 1.06332179f },
  { 0.73265427f, 0.68060100f, 1.07648134f },
  { 0.73681657f, 0.67609270f, 1.08981589f },
  { 0.74095113f, 0.67155895f, 1.10332998f },
  { 0.74505779f, 0.66699992f, 1.11702829f },
  { 0.74913639f, 0.66241578f, 1.13091569f },
  { 0.75318680f, 0.65780669f, 1.14499717f },
  { 0.75720885f, 0.65317284f, 1.15927791f },
  { 0.76120239f, 0.64851440f, 1.17376327f },
  { 0.76516727f, 0.64383154f, 1.18845880f },
  { 0.76910334f, 0.63912444f, 1.20337024f },
  { 0.77301045f, 0.63439328f, 1.21850353f },
  { 0.77688847f, 0.62963824f, 1.23386481f },
  { 0.78073723f, 0.62485949f, 1.24946047f },
  { 0.78455660f, 0.62005721f, 1.26529711f },
  { 0.78834643f, 0.61523159f, 1.28138158f },
  { 0.79210658f, 0.61038281f, 1.29772099f },
  { 0.79583690f, 0.60551104f, 1.31432270f },
  { 0.79953727f, 0.60061648f, 1.33119436f },
  { 0.80320753f, 0.59569930f, 1.34834391f },
  { 0.80684755f, 0.59075970f, 1.36577961f },
  { 0.81045720f, 0.58579786f, 1.38351001f },
  { 0.81403633f, 0.58081396f, 1.40154402f },
  { 0.81758481f, 0.57580819f, 1.41989090f },
  { 0.82110251f, 0.57078075f, 1.43856029f },
  { 0.82458930f, 0.56573181f, 1.45756220f },
  { 0.82804505f, 0.56066158f, 1.47690707f },
  { 0.83146961f, 0.55557023f, 1.49660576f },
  { 0.83486287f, 0.55045797f, 1.51666960f },
  { 0.83822471f, 0.54532499f, 1.53711039f },
  { 0.84155498f, 0.54017147f, 1.55794043f },
  { 0.84485357f, 0.53499762f, 1.57917257f },
  { 0.84812034f, 0.52980362f, 1.60082020f },
  { 0.85135519f, 0.52458968f, 1.62289733f },
  { 0.85455799f, 0.51935599f, 1.64541857f },
  { 0.85772861f, 0.51410274f, 1.66839921f },
  { 0.86086694f, 0.50883014f, 1.69185523f },
  { 0.86397286f, 0.50353838f, 1.71580337f },
  { 0.86704625f, 0.49822767f, 1.74026114f },
  { 0.87008699f, 0.49289819f, 1.76524687f },
  { 0.87309498f, 0.48755016f, 1.79077980f },
  { 0.87607009f, 0.48218377f, 1.81688009f },
  { 0.87901223f, 0.47679923f, 1.84356889f },
  { 0.88192126f, 0.47139674f, 1.87086841f },
  { 0.88479710f, 0.46597650f, 1.89880199f },
  { 0.88763962f, 0.46053871f, 1.92739416f },
  { 0.89044872f, 0.45508359f, 1.95667070f },
  { 0.89322430f, 0.44961133f, 1.98665879f },
  { 0.89596625f, 0.44412214f, 2.01738702f },
  { 0.89867447f, 0.43861624f, 2.04888553f },
  { 0.90134885f, 0.43309382f, 2.08118613f },
  { 0.90398929f, 0.42755509f, 2.11432236f },
  { 0.90659570f, 0.42200027f, 2.14832967f },
  { 0.90916798f, 0.41642956f, 2.18324555f },
  { 0.91170603f, 0.41084317f, 2.21910962f },
  { 0.91420976f, 0.40524131f, 2.25596385f },
  { 0.91667906f, 0.39962420f, 2.29385273f },
  { 0.91911385f, 0.39399204f, 2.33282340f },
  { 0.92151404f, 0.38834505f, 2.37292595f },
  { 0.92387953f, 0.38268343f, 2.41421356f },
  { 0.92621024f, 0.37700741f, 2.45674280f },
  { 0.92850608f, 0.37131719f, 2.50057389f },
  { 0.93076696f, 0.36561300f, 2.54577098f },
  { 0.93299280f, 0.35989504f, 2.59240252f },
  { 0.93518351f, 0.35416353f, 2.64054157f },
  { 0.93733901f, 0.34841868f, 2.69026624f },
  { 0.93945922f, 0.34266072f, 2.74166012f },
  { 0.94154407f, 0.33688985f, 2.79481277f },
  { 0.94359346f, 0.33110631f, 2.84982026f },
  { 0.94560733f, 0.32531029f, 2.90678576f },
  { 0.94758559f, 0.31950203f, 2.96582024f },
  { 0.94952818f, 0.31368174f, 3.02704320f },
  { 0.95143502f, 0.30784964f, 3.09058351f },
  { 0.95330604f, 0.30200595f, 3.15658033f },
  { 0.95514117f, 0.29615089f, 3.22518421f },
  { 0.95694034f, 0.29028468f, 3.29655821f },
  { 0.95870347f, 0.28440754f, 3.37087928f },
  { 0.96043052f, 0.27851969f, 3.44833976f },
  { 0.96212140f, 0.27262136f, 3.52914907f },
  { 0.96377607f, 0.26671276f, 3.61353568f },
  { 0.96539444f, 0.26079412f, 3.70174929f },
  { 0.96697647f, 0.25486566f, 3.79406340f },
  { 0.96852209f, 0.24892761f, 3.89077817f },
  { 0.97003125f, 0.24298018f, 3.99222378f },
  { 0.97150389f, 0.23702361f, 4.09876429f },
  { 0.97293995f, 0.23105811f, 4.21080203f },
  { 0.97433938f, 0.22508391f, 4.32878288f },
  { 0.97570213f, 0.21910124f, 4.45320222f },
  { 0.97702814f, 0.21311032f, 4.58461206f },
  { 0.97831737f, 0.20711138f, 4.72362933f },
  { 0.97956977f, 0.20110463f, 4.87094575f },
  { 0.98078528f, 0.19509032f, 5.02733949f },
  { 0.98196387f, 0.18906866f, 5.19368915f },
  { 0.98310549f, 0.18303989f, 5.37099044f },
  { 0.98421009f, 0.17700422f, 5.56037641f },
  { 0.98527764f, 0.17096189f, 5.76314201f },
  { 0.98630810f, 0.16491312f, 5.98077396f },
  { 0.98730142f, 0.15885814f, 6.21498777f },
  { 0.98825757f, 0.15279719f, 6.46777338f },
  { 0.98917651f, 0.14673047f, 6.74145241f },
  { 0.99005821f, 0.14065824f, 7.03875020f },
  { 0.99090264f, 0.13458071f, 7.36288764f },
  { 0.99170975f, 0.12849811f, 7.71769910f },
  { 0.99247953f, 0.12241068f, 8.10778580f },
  { 0.99321195f, 0.11631863f, 8.53871767f },
  { 0.99390697f, 0.11022221f, 9.01730236f },
  { 0.99456457f, 0.10412163f, 9.55194933f },
  { 0.99518473f, 0.09801714f, 10.15317039f },
  { 0.99576741f, 0.09190896f, 10.83428049f },
  { 0.99631261f, 0.08579731f, 11.61239886f },
  { 0.99682030f, 0.07968244f, 12.50991215f },
  { 0.99729046f, 0.07356456f, 13.55666924f },
  { 0.99772307f, 0.06744392f, 14.79337312f },
  { 0.99811811f, 0.06132074f, 16.27700796f },
  { 0.99847558f, 0.05519524f, 18.08988423f },
  { 0.99879546f, 0.04906767f, 20.35546762f },
  { 0.99907773f, 0.04293826f, 23.26777562f },
  { 0.99932238f, 0.03680722f, 27.15017067f },
  { 0.99952942f, 0.03067480f, 32.58470516f },
  { 0.99969882f, 0.02454123f, 40.73548387f },
  { 0.99983058f, 0.01840673f, 54.31875118f },
  { 0.99992470f, 0.01227154f, 81.48324021f },
  { 0.99998118f, 0.00613588f, 162.97261641f },
  { 1.00000000f, 0.00000000f, 16331239353195370.00000000f },
  { 0.99998118f, -0.00613588f, -162.97261641f },
  { 0.99992470f, -0.01227154f, -81.48324021f },
  { 0.99983058f, -0.01840673f, -54.31875118f },
  { 0.99969882f, -0.02454123f, -40.73548387f },
  { 0.99952942f, -0.03067480f, -32.58470516f },
  { 0.99932238f, -0.03680722f, -27.15017067f },
  { 0.99907773f, -0.04293826f, -23.26777562f },
  { 0.99879546f, -0.04906767f, -20.35546762f },
  { 0.99847558f, -0.05519524f, -18.08988423f },
  { 0.99811811f, -0.06132074f, -16.27700796f },
  { 0.99772307f, -0.06744392f, -14.79337312f },
  { 0.99729046f, -0.07356456f, -13.55666924f },
  { 0.99682030f, -0.07968244f, -12.50991215f },
  { 0.99631261f, -0.08579731f, -11.61239886f },
  { 0.99576741f, -0.09190896f, -10.83428049f },
  { 0.99518473f, -0.09801714f, -10.15317039f },
  { 0.99456457f, -0.10412163f, -9.55194933f },
  { 0.99390697f, -0.11022221f, -9.01730236f },
  { 0.99321195f, -0.11631863f, -8.53871767f },
  { 0.99247953f, -0.12241068f, -8.10778580f },
  { 0.99170975f, -0.12849811f, -7.71769910f },
  { 0.99090264f, -0.13458071f, -7.36288764f },
  { 0.99005821f, -0.14065824f, -7.03875020f },
  { 0.98917651f, -0.14673047f, -6.74145241f },
  { 0.98825757f, -0.15279719f, -6.46777338f },
  { 0.98730142f, -0.15885814f, -6.21498777f },
  { 0.98630810f, -0.16491312f, -5.98077396f },
  { 0.98527764f, -0.17096189f, -5.76314201f },
  { 0.98421009f, -0.17700422f, -5.56037641f },
  { 0.98310549f, -0.18303989f, -5.37099044f },
  { 0.98196387f, -0.18906866f, -5.19368915f },
  { 0.98078528f, -0.19509032f, -5.02733949f },
  { 0.97956977f, -0.20110463f, -4.87094575f },
  { 0.97831737f, -0.20711138f, -4.72362933f },
  { 0.97702814f, -0.21311032f, -4.58461206f },
  { 0.97570213f, -0.21910124f, -4.45320222f },
  { 0.97433938f, -0.22508391f, -4.32878288f },
  { 0.97293995f, -0.23105811f, -4.21080203f },
  { 0.97150389f, -0.23702361f, -4.09876429f },
  { 0.97003125f, -0.24298018f, -3.99222378f },
  { 0.96852209f, -0.24892761f, -3.89077817f },
  { 0.96697647f, -0.25486566f, -3.79406340f },
  { 0.96539444f, -0.26079412f, -3.70174929f },
  { 0.96377607f, -0.26671276f, -3.61353568f },
  { 0.96212140f, -0.27262136f, -3.52914907f },
  { 0.96043052f, -0.27851969f, -3.44833976f },
  { 0.95870347f, -0.28440754f, -3.37087928f },
  { 0.95694034f, -0.29028468f, -3.29655821f },
  { 0.95514117f, -0.29615089f, -3.22518421f },
  { 0.95330604f, -0.30200595f, -3.15658033f },
  { 0.95143502f, -0.30784964f, -3.09058351f },
  { 0.94952818f, -0.31368174f, -3.02704320f },
  { 0.94758559f, -0.31950203f, -2.96582024f },
  { 0.94560733f, -0.32531029f, -2.90678576f },
  { 0.94359346f, -0.33110631f, -2.84982026f },
  { 0.94154407f, -0.33688985f, -2.79481277f },
  { 0.93945922f, -0.34266072f, -2.74166012f },
  { 0.93733901f, -0.34841868f, -2.69026624f },
  { 0.93518351f, -0.35416353f, -2.64054157f },
  { 0.93299280f, -0.35989504f, -2.59240252f },
  { 0.93076696f, -0.36561300f, -2.54577098f },
  { 0.92850608f, -0.37131719f, -2.50057389f },
  { 0.92621024f, -0.37700741f, -2.45674280f },
  { 0.92387953f, -0.38268343f, -2.41421356f },
  { 0.92151404f, -0.38834505f, -2.37292595f },
  { 0.91911385f, -0.39399204f, -2.33282340f },
  { 0.91667906f, -0.39962420f, -2.29385273f },
  { 0.91420976f, -0.40524131f, -2.25596385f },
  { 0.91170603f, -0.41084317f, -2.21910962f },
  { 0.90916798f, -0.41642956f, -2.18324555f },
  { 0.90659570f, -0.42200027f, -2.14832967f },
  { 0.90398929f, -0.42755509f, -2.11432236f },
  { 0.90134885f, -0.43309382f, -2.08118613f },
  { 0.89867447f, -0.43861624f, -2.04888553f },
  { 0.89596625f, -0.44412214f, -2.01738702f },
  { 0.89322430f, -0.44961133f, -1.98665879f },
  { 0.89044872f, -0.45508359f, -1.95667070f },
  { 0.88763962f, -0.46053871f, -1.92739416f },
  { 0.88479710f, -0.46597650f, -1.89880199f },
  { 0.88192126f, -0.47139674f, -1.87086841f },
  { 0.87901223f, -0.47679923f, -1.84356889f },
  { 0.87607009f, -0.48218377f, -1.81688009f },
  { 0.87309498f, -0.48755016f, -1.79077980f },
  { 0.87008699f, -0.49289819f, -1.76524687f },
  { 0.86704625f, -0.49822767f, -1.74026114f },
  { 0.86397286f, -0.50353838f, -1.71580337f },
  { 0.86086694f, -0.50883014f, -1.69185523f },
  { 0.85772861f, -0.51410274f, -1.66839921f },
  { 0.85455799f, -0.51935599f, -1.64541857f },
  { 0.85135519f, -0.52458968f, -1.62289733f },
  { 0.84812034f, -0.52980362f, -1.60082020f },
  { 0.84485357f, -0.53499762f, -1.57917257f },
  { 0.84155498f, -0.54017147f, -1.55794043f },
  { 0.83822471f, -0.54532499f, -1.53711039f },
  { 0.83486287f, -0.55045797f, -1.51666960f },
  { 0.83146961f, -0.55557023f, -1.49660576f },
  { 0.82804505f, -0.56066158f, -1.47690707f },
  { 0.82458930f, -0.56573181f, -1.45756220f },
  { 0.82110251f, -0.57078075f, -1.43856029f },
  { 0.81758481f, -0.57580819f, -1.41989090f },
  { 0.81403633f, -0.58081396f, -1.40154402f },
  { 0.81045720f, -0.58579786f, -1.38351001f },
  { 0.80684755f, -0.59075970f, -1.36577961f },
  { 0.80320753f, -0.59569930f, -1.34834391f },
  { 0.79953727f, -0.60061648f, -1.33119436f },
  { 0.79583690f, -0.60551104f, -1.31432270f },
  { 0.79210658f, -0.61038281f, -1.29772099f },
  { 0.78834643f, -0.61523159f, -1.28138158f },
  { 0.78455660f, -0.62005721f, -1.26529711f },
  { 0.78073723f, -0.62485949f, -1.24946047f },
  { 0.77688847f, -0.62963824f, -1.23386481f },
  { 0.77301045f, -0.63439328f, -1.21850353f },
  { 0.76910334f, -0.63912444f, -1.20337024f },
  { 0.76516727f, -0.64383154f, -1.18845880f },
  { 0.76120239f, -0.64851440f, -1.17376327f },
  { 0.75720885f, -0.65317284f, -1.15927791f },
  { 0.75318680f, -0.65780669f, -1.14499717f },
  { 0.74913639f, -0.66241578f, -1.13091569f },
  { 0.74505779f, -0.66699992f, -1.11702829f },
  { 0.74095113f, -0.67155895f, -1.10332998f },
  { 0.73681657f, -0.67609270f, -1.08981589f },
  { 0.73265427f, -0.68060100f, -1.07648134f },
  { 0.72846439f, -0.68508367f, -1.06332179f },
  { 0.72424708f, -0.68954054f, -1.05033285f },
  { 0.72000251f, -0.69397146f, -1.03751026f },
  { 0.71573083f, -0.69837625f, -1.02484989f },
  { 0.71143220f, -0.70275474f, -1.01234777f },
  { 0.70710678f, -0.70710678f, -1.00000000f },
  { 0.70275474f, -0.71143220f, -0.98780284f },
  { 0.69837625f, -0.71573083f, -0.97575265f },
  { 0.69397146f, -0.72000251f, -0.96384589f },
  { 0.68954054f, -0.72424708f, -0.95207915f },
  { 0.68508367f, -0.72846439f, -0.94044908f },
  { 0.68060100f, -0.73265427f, -0.92895247f },
  { 0.67609270f, -0.73681657f, -0.91758618f },
  { 0.67155895f, -0.74095113f, -0.90634717f },
  { 0.66699992f, -0.74505779f, -0.89523247f },
  { 0.66241578f, -0.74913639f, -0.88423922f },
  { 0.65780669f, -0.75318680f, -0.87336461f },
  { 0.65317284f, -0.75720885f, -0.86260593f },
  { 0.64851440f, -0.76120239f, -0.85196055f },
  { 0.64383154f, -0.76516727f, -0.84142588f },
  { 0.63912444f, -0.76910334f, -0.83099944f },
  { 0.63439328f, -0.77301045f, -0.82067879f },
  { 0.62963824f, -0.77688847f, -0.81046156f },
  { 0.62485949f, -0.78073723f, -0.80034545f },
  { 0.62005721f, -0.78455660f, -0.79032821f },
  { 0.61523159f, -0.78834643f, -0.78040766f },
  { 0.61038281f, -0.79210658f, -0.77058167f },
  { 0.60551104f, -0.79583690f, -0.76084816f },
  { 0.60061648f, -0.79953727f, -0.75120511f },
  { 0.59569930f, -0.80320753f, -0.74165055f },
  { 0.59075970f, -0.80684755f, -0.73218255f },
  { 0.58579786f, -0.81045720f, -0.72279925f },
  { 0.58081396f, -0.81403633f, -0.71349882f },
  { 0.57580819f, -0.81758481f, -0.70427946f },
  { 0.57078075f, -0.82110251f, -0.69513944f },
  { 0.56573181f, -0.82458930f, -0.68607707f },
  { 0.56066158f, -0.82804505f, -0.67709067f },
  { 0.55557023f, -0.83146961f, -0.66817864f },
  { 0.55045797f, -0.83486287f, -0.65933938f },
  { 0.54532499f, -0.83822471f, -0.65057136f },
  { 0.54017147f, -0.84155498f, -0.64187306f },
  { 0.53499762f, -0.84485357f, -0.63324302f },
  { 0.52980362f, -0.84812034f, -0.62467977f },
  { 0.52458968f, -0.85135519f, -0.61618193f },
  { 0.51935599f, -0.85455799f, -0.60774810f },
  { 0.51410274f, -0.85772861f, -0.59937693f },
  { 0.50883014f, -0.86086694f, -0.59106712f },
  { 0.50353838f, -0.86397286f, -0.58281737f },
  { 0.49822767f, -0.86704625f, -0.57462640f },
  { 0.49289819f, -0.87008699f, -0.56649300f },
  { 0.48755016f, -0.87309498f, -0.55841595f },
  { 0.48218377f, -0.87607009f, -0.55039406f },
  { 0.47679923f, -0.87901223f, -0.54242616f },
  { 0.47139674f, -0.88192126f, -0.53451114f },
  { 0.46597650f, -0.88479710f, -0.52664786f },
  { 0.46053871f, -0.88763962f, -0.51883523f },
  { 0.45508359f, -0.89044872f, -0.51107220f },
  { 0.44961133f, -0.89322430f, -0.50335770f },
  { 0.44412214f, -0.89596625f, -0.49569071f },
  { 0.43861624f, -0.89867447f, -0.48807021f },
  { 0.43309382f, -0.90134885f, -0.48049523f },
  { 0.42755509f, -0.90398929f, -0.47296478f },
  { 0.42200027f, -0.90659570f, -0.46547791f },
  { 0.41642956f, -0.90916798f, -0.45803368f },
  { 0.41084317f, -0.91170603f, -0.45063119f },
  { 0.40524131f, -0.91420976f, -0.44326951f },
  { 0.39962420f, -0.91667906f, -0.43594778f },
  { 0.39399204f, -0.91911385f, -0.42866511f },
  { 0.38834505f, -0.92151404f, -0.42142065f },
  { 0.38268343f, -0.92387953f, -0.41421356f },
  { 0.37700741f, -0.92621024f, -0.40704302f },
  { 0.37131719f, -0.92850608f, -0.39990820f },
  { 0.36561300f, -0.93076696f, -0.39280831f },
  { 0.35989504f, -0.93299280f, -0.38574257f },
  { 0.35416353f, -0.93518351f, -0.37871019f },
  { 0.34841868f, -0.93733901f, -0.37171042f },
  { 0.34266072f, -0.93945922f, -0.36474251f },
  { 0.33688985f, -0.94154407f, -0.35780572f },
  { 0.33110631f, -0.94359346f, -0.35089932f },
  { 0.32531029f, -0.94560733f, -0.34402260f },
  { 0.31950203f, -0.94758559f, -0.33717485f },
  { 0.31368174f, -0.94952818f, -0.33035538f },
  { 0.30784964f, -0.95143502f, -0.32356349f },
  { 0.30200595f, -0.95330604f, -0.31679853f },
  { 0.29615089f, -0.95514117f, -0.31005981f },
  { 0.29028468f, -0.95694034f, -0.30334668f },
  { 0.28440754f, -0.95870347f, -0.29665850f },
  { 0.27851969f, -0.96043052f, -0.28999463f },
  { 0.27262136f, -0.96212140f, -0.28335442f },
  { 0.26671276f, -0.96377607f, -0.27673727f },
  { 0.26079412f, -0.96539444f, -0.27014255f },
  { 0.25486566f, -0.96697647f, -0.26356966f },
  { 0.24892761f, -0.96852209f, -0.25701799f },
  { 0.24298018f, -0.97003125f, -0.25048696f },
  { 0.23702361f, -0.97150389f, -0.24397597f },
  { 0.23105811f, -0.97293995f, -0.23748445f },
  { 0.22508391f, -0.97433938f, -0.23101182f },
  { 0.21910124f, -0.97570213f, -0.22455751f },
  { 0.21311032f, -0.97702814f, -0.21812096f },
  { 0.20711138f, -0.97831737f, -0.21170162f },
  { 0.20110463f, -0.97956977f, -0.20529894f },
  { 0.19509032f, -0.98078528f, -0.19891237f },
  { 0.18906866f, -0.98196387f, -0.19254137f },
  { 0.18303989f, -0.98310549f, -0.18618540f },
  { 0.17700422f, -0.98421009f, -0.17984394f },
  { 0.17096189f, -0.98527764f, -0.17351646f },
  { 0.16491312f, -0.98630810f, -0.16720244f },
  { 0.15885814f, -0.98730142f, -0.16090136f },
  { 0.15279719f, -0.98825757f, -0.15461271f },
  { 0.14673047f, -0.98917651f, -0.14833599f },
  { 0.14065824f, -0.99005821f, -0.14207068f },
  { 0.13458071f, -0.99090264f, -0.13581628f },
  { 0.12849811f, -0.99170975f, -0.12957230f },
  { 0.12241068f, -0.99247953f, -0.12333824f },
  { 0.11631863f, -0.99321195f, -0.11711360f },
  { 0.11022221f, -0.99390697f, -0.11089791f },
  { 0.10412163f, -0.99456457f, -0.10469067f },
  { 0.09801714f, -0.99518473f, -0.09849140f },
  { 0.09190896f, -0.99576741f, -0.09229962f },
  { 0.08579731f, -0.99631261f, -0.08611485f },
  { 0.07968244f, -0.99682030f, -0.07993661f },
  { 0.07356456f, -0.99729046f, -0.07376443f },
  { 0.06744392f, -0.99772307f, -0.06759784f },
  { 0.06132074f, -0.99811811f, -0.06143635f },
  { 0.05519524f, -0.99847558f, -0.05527951f },
  { 0.04906767f, -0.99879546f, -0.04912685f },
  { 0.04293826f, -0.99907773f, -0.04297789f },
  { 0.03680722f, -0.99932238f, -0.03683218f },
  { 0.03067480f, -0.99952942f, -0.03068924f },
  { 0.02454123f, -0.99969882f, -0.02454862f },
  { 0.01840673f, -0.99983058f, -0.01840985f },
  { 0.01227154f, -0.99992470f, -0.01227246f },
  { 0.00613588f, -0.99998118f, -0.00613600f },
  { 0.00000000f, -1.00000000f, -0.00000000f },
  { -0.00613588f, -0.99998118f, 0.00613600f },
  { -0.01227154f, -0.99992470f, 0.01227246f },
  { -0.01840673f, -0.99983058f, 0.01840985f },
  { -0.02454123f, -0.99969882f, 0.02454862f },
  { -0.03067480f, -0.99952942f, 0.03068924f },
  { -0.03680722f, -0.99932238f, 0.03683218f },
  { -0.04293826f, -0.99907773f, 0.04297789f },
  { -0.04906767f, -0.99879546f, 0.04912685f },
  { -0.05519524f, -0.99847558f, 0.05527951f },
  { -0.06132074f, -0.99811811f, 0.06143635f },
  { -0.06744392f, -0.99772307f, 0.06759784f },
  { -0.07356456f, -0.99729046f, 0.07376443f },
  { -0.07968244f, -0.99682030f, 0.07993661f },
  { -0.08579731f, -0.99631261f, 0.08611485f },
  { -0.09190896f, -0.99576741f, 0.09229962f },
  { -0.09801714f, -0.99518473f, 0.09849140f },
  { -0.10412163f, -0.99456457f, 0.10469067f },
  { -0.11022221f, -0.99390697f, 0.11089791f },
  { -0.11631863f, -0.99321195f, 0.11711360f },
  { -0.12241068f, -0.99247953f, 0.12333824f },
  { -0.12849811f, -0.99170975f, 0.12957230f },
  { -0.13458071f, -0.99090264f, 0.13581628f },
  { -0.14065824f, -0.99005821f, 0.14207068f },
  { -0.14673047f, -0.98917651f, 0.14833599f },
  { -0.15279719f, -0.98825757f, 0.15461271f },
  { -0.15885814f, -0.98730142f, 0.16090136f },
  { -0.16491312f, -0.98630810f, 0.16720244f },
  { -0.17096189f, -0.98527764f, 0.17351646f },
  { -0.17700422f, -0.98421009f, 0.17984394f },
  { -0.18303989f, -0.98310549f, 0.18618540f },
  { -0.18906866f, -0.98196387f, 0.19254137f },
  { -0.19509032f, -0.98078528f, 0.19891237f },
  { -0.20110463f, -0.97956977f, 0.20529894f },
  { -0.20711138f, -0.97831737f, 0.21170162f },
  { -0.21311032f, -0.97702814f, 0.21812096f },
  { -0.21910124f, -0.97570213f, 0.22455751f },
  { -0.22508391f, -0.97433938f, 0.23101182f },
  { -0.23105811f, -0.97293995f, 0.23748445f },
  { -0.23702361f, -0.97150389f, 0.24397597f },
  { -0.24298018f, -0.97003125f, 0.25048696f },
  { -0.24892761f, -0.96852209f, 0.25701799f },
  { -0.25486566f, -0.96697647f, 0.26356966f },
  { -0.26079412f, -0.96539444f, 0.27014255f },
  { -0.26671276f, -0.96377607f, 0.27673727f },
  { -0.27262136f, -0.96212140f, 0.28335442f },
  { -0.27851969f, -0.96043052f, 0.28999463f },
  { -0.28440754f, -0.95870347f, 0.29665850f },
  { -0.29028468f, -0.95694034f, 0.30334668f },
  { -0.29615089f, -0.95514117f, 0.31005981f },
  { -0.30200595f, -0.95330604f, 0.31679853f },
  { -0.30784964f, -0.95143502f, 0.32356349f },
  { -0.31368174f, -0.94952818f, 0.33035538f },
  { -0.31950203f, -0.94758559f, 0.33717485f },
  { -0.32531029f, -0.94560733f, 0.34402260f },
  { -0.33110631f, -0.94359346f, 0.35089932f },
  { -0.33688985f, -0.94154407f, 0.35780572f },
  { -0.34266072f, -0.93945922f, 0.36474251f },
  { -0.34841868f, -0.93733901f, 0.37171042f },
  { -0.35416353f, -0.93518351f, 0.37871019f },
  { -0.35989504f, -0.93299280f, 0.38574257f },
  { -0.36561300f, -0.93076696f, 0.39280831f },
  { -0.37131719f, -0.92850608f, 0.39990820f },
  { -0.37700741f, -0.92621024f, 0.40704302f },
  { -0.38268343f, -0.92387953f, 0.41421356f },
  { -0.38834505f, -0.92151404f, 0.42142065f },
  { -0.39399204f, -0.91911385f, 0.42866511f },
  { -0.39962420f, -0.91667906f, 0.43594778f },
  { -0.40524131f, -0.91420976f, 0.44326951f },
  { -0.41084317f, -0.91170603f, 0.45063119f },
  { -0.41642956f, -0.90916798f, 0.45803368f },
  { -0.42200027f, -0.90659570f, 0.46547791f },
  { -0.42755509f, -0.90398929f, 0.47296478f },
  { -0.43309382f, -0.90134885f, 0.48049523f },
  { -0.43861624f, -0.89867447f, 0.48807021f },
  { -0.44412214f, -0.89596625f, 0.49569071f },
  { -0.44961133f, -0.89322430f, 0.50335770f },
  { -0.45508359f, -0.89044872f, 0.51107220f },
  { -0.46053871f, -0.88763962f, 0.51883523f },
  { -0.46597650f, -0.88479710f, 0.52664786f },
  { -0.47139674f, -0.88192126f, 0.53451114f },
  { -0.47679923f, -0.87901223f, 0.54242616f },
  { -0.48218377f, -0.87607009f, 0.55039406f },
  { -0.48755016f, -0.87309498f, 0.55841595f },
  { -0.49289819f, -0.87008699f, 0.56649300f },
  { -0.49822767f, -0.86704625f, 0.57462640f },
  { -0.50353838f, -0.86397286f, 0.58281737f },
  { -0.50883014f, -0.86086694f, 0.59106712f },
  { -0.51410274f, -0.85772861f, 0.59937693f },
  { -0.51935599f, -0.85455799f, 0.60774810f },
  { -0.52458968f, -0.85135519f, 0.61618193f },
  { -0.52980362f, -0.84812034f, 0.62467977f },
  { -0.53499762f, -0.84485357f, 0.63324302f },
  { -0.54017147f, -0.84155498f, 0.64187306f },
  { -0.54532499f, -0.83822471f, 0.65057136f },
  { -0.55045797f, -0.83486287f, 0.65933938f },
  { -0.55557023f, -0.83146961f, 0.66817864f },
  { -0.56066158f, -0.82804505f, 0.67709067f },
  { -0.56573181f, -0.82458930f, 0.68607707f },
  { -0.57078075f, -0.82110251f, 0.69513944f },
  { -0.57580819f, -0.81758481f, 0.70427946f },
  { -0.58081396f, -0.81403633f, 0.71349882f },
  { -0.58579786f, -0.81045720f, 0.72279925f },
  { -0.59075970f, -0.80684755f, 0.73218255f },
  { -0.59569930f, -0.80320753f, 0.74165055f },
  { -0.60061648f, -0.79953727f, 0.75120511f },
  { -0.60551104f, -0.79583690f, 0.76084816f },
  { -0.61038281f, -0.79210658f, 0.77058167f },
  { -0.61523159f, -0.78834643f, 0.78040766f },
  { -0.62005721f, -0.78455660f, 0.79032821f },
  { -0.62485949f, -0.78073723f, 0.80034545f },
  { -0.62963824f, -0.77688847f, 0.81046156f },
  { -0.63439328f, -0.77301045f, 0.82067879f },
  { -0.63912444f, -0.76910334f, 0.83099944f },
  { -0.64383154f, -0.76516727f, 0.84142588f },
  { -0.64851440f, -0.76120239f, 0.85196055f },
  { -0.65317284f, -0.75720885f, 0.86260593f },
  { -0.65780669f, -0.75318680f, 0.87336461f },
  { -0.66241578f, -0.74913639f, 0.88423922f },
  { -0.66699992f, -0.74505779f, 0.89523247f },
  { -0.67155895f, -0.74095113f, 0.90634717f },
  { -0.67609270f, -0.73681657f, 0.91758618f },
  { -0.68060100f, -0.73265427f, 0.92895247f },
  { -0.68508367f, -0.72846439f, 0.94044908f },
  { -0.68954054f, -0.72424708f, 0.95207915f },
  { -0.69397146f, -0.72000251f, 0.96384589f },
  { -0.69837625f, -0.71573083f, 0.97575265f },
  { -0.70275474f, -0.71143220f, 0.98780284f },
  { -0.70710678f, -0.70710678f, 1.00000000f },
  { -0.71143220f, -0.70275474f, 1.01234777f },
  { -0.71573083f, -0.69837625f, 1.02484989f },
  { -0.72000251f, -0.69397146f, 1.03751026f },
  { -0.72424708f, -0.68954054f, 1.05033285f },
  { -0.72846439f, -0.68508367f, 1.06332179f },
  { -0.73265427f, -0.68060100f, 1.07648134f },
  { -0.73681657f, -0.67609270f, 1.08981589f },
  { -0.74095113f, -0.67155895f, 1.10332998f },
  { -0.74505779f, -0.66699992f, 1.11702829f },
  { -0.74913639f, -0.66241578f, 1.13091569f },
  { -0.75318680f, -0.65780669f, 1.14499717f },
  { -0.75720885f, -0.65317284f, 1.15927791f },
  { -0.76120239f, -0.64851440f, 1.17376327f },
  { -0.76516727f, -0.64383154f, 1.18845880f },
  { -0.76910334f, -0.63912444f, 1.20337024f },
  { -0.77301045f, -0.63439328f, 1.21850353f },
  { -0.77688847f, -0.62963824f, 1.23386481f },
  { -0.78073723f, -0.62485949f, 1.24946047f },
  { -0.78455660f, -0.62005721f, 1.26529711f },
  { -0.78834643f, -0.61523159f, 1.28138158f },
  { -0.79210658f, -0.61038281f, 1.29772099f },
  { -0.79583690f, -0.60551104f, 1.31432270f },
  { -0.79953727f, -0.60061648f, 1.33119436f },
  { -0.80320753f, -0.59569930f, 1.34834391f },
  { -0.80684755f, -0.59075970f, 1.36577961f },
  { -0.81045720f, -0.58579786f, 1.38351001f },
  { -0.81403633f, -0.58081396f, 1.40154402f },
  { -0.81758481f, -0.57580819f, 1.41989090f },
  { -0.82110251f, -0.57078075f, 1.43856029f },
  { -0.82458930f, -0.56573181f, 1.45756220f },
  { -0.82804505f, -0.56066158f, 1.47690707f },
  { -0.83146961f, -0.55557023f, 1.49660576f },
  { -0.83486287f, -0.55045797f, 1.51666960f },
  { -0.83822471f, -0.54532499f, 1.53711039f },
  { -0.84155498f, -0.54017147f, 1.55794043f },
  { -0.84485357f, -0.53499762f, 1.57917257f },
  { -0.84812034f, -0.52980362f, 1.60082020f },
  { -0.85135519f, -0.52458968f, 1.62289733f },
  { -0.85455799f, -0.51935599f, 1.64541857f },
  { -0.85772861f, -0.51410274f, 1.66839921f },
  { -0.86086694f, -0.50883014f, 1.69185523f },
  { -0.86397286f, -0.50353838f, 1.71580337f },
  { -0.86704625f, -0.49822767f, 1.74026114f },
  { -0.87008699f, -0.49289819f, 1.76524687f },
  { -0.87309498f, -0.48755016f, 1.79077980f },
  { -0.87607009f, -0.48218377f, 1.81688009f },
  { -0.87901223f, -0.47679923f, 1.84356889f },
  { -0.88192126f, -0.47139674f, 1.87086841f },
  { -0.88479710f, -0.46597650f, 1.89880199f },
  { -0.88763962f, -0.46053871f, 1.92739416f },
  { -0.89044872f, -0.45508359f, 1.95667070f },
  { -0.89322430f, -0.44961133f, 1.98665879f },
  { -0.89596625f, -0.44412214f, 2.01738702f },
  { -0.89867447f, -0.43861624f, 2.04888553f },
  { -0.90134885f, -0.43309382f, 2.08118613f },
  { -0.90398929f, -0.42755509f, 2.11432236f },
  { -0.90659570f, -0.42200027f, 2.14832967f },
  { -0.90916798f, -0.41642956f, 2.18324555f },
  { -0.91170603f, -0.41084317f, 2.21910962f },
  { -0.91420976f, -0.40524131f, 2.25596385f },
  { -0.91667906f, -0.39962420f, 2.29385273f },
  { -0.91911385f, -0.39399204f, 2.33282340f },
  { -0.92151404f, -0.38834505f, 2.37292595f },
  { -0.92387953f, -0.38268343f, 2.41421356f },
  { -0.92621024f, -0.37700741f, 2.45674280f },
  { -0.92850608f, -0.37131719f, 2.50057389f },
  { -0.93076696f, -0.36561300f, 2.54577098f },
  { -0.93299280f, -0.35989504f, 2.59240252f },
  { -0.93518351f, -0.35416353f, 2.64054157f },
  { -0.93733901f, -0.34841868f, 2.69026624f },
  { -0.93945922f, -0.34266072f, 2.74166012f },
  { -0.94154407f, -0.33688985f, 2.79481277f },
  { -0.94359346f, -0.33110631f, 2.84982026f },
  { -0.94560733f, -0.32531029f, 2.90678576f },
  { -0.94758559f, -0.31950203f, 2.96582024f },
  { -0.94952818f, -0.31368174f, 3.02704320f },
  { -0.95143502f, -0.30784964f, 3.09058351f },
  { -0.95330604f, -0.30200595f, 3.15658033f },
  { -0.95514117f, -0.29615089f, 3.22518421f },
  { -0.95694034f, -0.29028468f, 3.29655821f },
  { -0.95870347f, -0.28440754f, 3.37087928f },
  { -0.96043052f, -0.27851969f, 3.44833976f },
  { -0.96212140f, -0.27262136f, 3.52914907f },
  { -0.96377607f, -0.26671276f, 3.61353568f },
  { -0.96539444f, -0.26079412f, 3.70174929f },
  { -0.96697647f, -0.25486566f, 3.79406340f },
  { -0.96852209f, -0.24892761f, 3.89077817f },
  { -0.97003125f, -0.24298018f, 3.99222378f },
  { -0.97150389f, -0.23702361f, 4.09876429f },
  { -0.97293995f, -0.23105811f, 4.21080203f },
  { -0.97433938f, -0.22508391f, 4.32878288f },
  { -0.97570213f, -0.21910124f, 4.45320222f },
  { -0.97702814f, -0.21311032f, 4.58461206f },
  { -0.97831737f, -0.20711138f, 4.72362933f },
  { -0.97956977f, -0.20110463f, 4.87094575f },
  { -0.98078528f, -0.19509032f, 5.02733949f },
  { -0.98196387f, -0.18906866f, 5.19368915f },
  { -0.98310549f, -0.18303989f, 5.37099044f },
  { -0.98421009f, -0.17700422f, 5.56037641f },
  { -0.98527764f, -0.17096189f, 5.76314201f },
  { -0.98630810f, -0.16491312f, 5.98077396f },
  { -0.98730142f, -0.15885814f, 6.21498777f },
  { -0.98825757f, -0.15279719f, 6.46777338f },
  { -0.98917651f, -0.14673047f, 6.74145241f },
  { -0.99005821f, -0.14065824f, 7.03875020f },
  { -0.99090264f, -0.13458071f, 7.36288764f },
  { -0.99170975f, -0.12849811f, 7.71769910f },
  { -0.99247953f, -0.12241068f, 8.10778580f },
  { -0.99321195f, -0.11631863f, 8.53871767f },
  { -0.99390697f, -0.11022221f, 9.01730236f },
  { -0.99456457f, -0.10412163f, 9.55194933f },
  { -0.99518473f, -0.09801714f, 10.15317039f },
  { -0.99576741f, -0.09190896f, 10.83428049f },
  { -0.99631261f, -0.08579731f, 11.61239886f },
  { -0.99682030f, -0.07968244f, 12.50991215f },
  { -0.99729046f, -0.07356456f, 13.55666924f },
  { -0.99772307f, -0.06744392f, 14.79337312f },
  { -0.99811811f, -0.06132074f, 16.27700796f },
  { -0.99847558f, -0.05519524f, 18.08988423f },
  { -0.99879546f, -0.04906767f, 20.35546762f },
  { -0.99907773f, -0.04293826f, 23.26777562f },
  { -0.99932238f, -0.03680722f, 27.15017067f },
  { -0.99952942f, -0.03067480f, 32.58470516f },
  { -0.99969882f, -0.02454123f, 40.73548387f },
  { -0.99983058f, -0.01840673f, 54.31875118f },
  { -0.99992470f, -0.01227154f, 81.48324021f },
  { -0.99998118f, -0.00613588f, 162.97261641f },
  { -1.00000000f, -0.00000000f, 5443746451065123.00000000f },
  { -0.99998118f, 0.00613588f, -162.97261641f },
  { -0.99992470f, 0.01227154f, -81.48324021f },
  { -0.99983058f, 0.01840673f, -54.31875118f },
  { -0.99969882f, 0.02454123f, -40.73548387f },
  { -0.99952942f, 0.03067480f, -32.58470516f },
  { -0.99932238f, 0.03680722f, -27.15017067f },
  { -0.99907773f, 0.04293826f, -23.26777562f },
  { -0.99879546f, 0.04906767f, -20.35546762f },
  { -0.99847558f, 0.05519524f, -18.08988423f },
  { -0.99811811f, 0.06132074f, -16.27700796f },
  { -0.99772307f, 0.06744392f, -14.79337312f },
  { -0.99729046f, 0.07356456f, -13.55666924f },
  { -0.99682030f, 0.07968244f, -12.50991215f },
  { -0.99631261f, 0.08579731f, -11.61239886f },
  { -0.99576741f, 0.09190896f, -10.83428049f },
  { -0.99518473f, 0.09801714f, -10.15317039f },
  { -0.99456457f, 0.10412163f, -9.55194933f },
  { -0.99390697f, 0.11022221f, -9.01730236f },
  { -0.99321195f, 0.11631863f, -8.53871767f },
  { -0.99247953f, 0.12241068f, -8.10778580f },
  { -0.99170975f, 0.12849811f, -7.71769910f },
  { -0.99090264f, 0.13458071f, -7.36288764f },
  { -0.99005821f, 0.14065824f, -7.03875020f },
  { -0.98917651f, 0.14673047f, -6.74145241f },
  { -0.98825757f, 0.15279719f, -6.46777338f },
  { -0.98730142f, 0.15885814f, -6.21498777f },
  { -0.98630810f, 0.16491312f, -5.98077396f },
  { -0.98527764f, 0.17096189f, -5.76314201f },
  { -0.98421009f, 0.17700422f, -5.56037641f },
  { -0.98310549f, 0.18303989f, -5.37099044f },
  { -0.98196387f, 0.18906866f, -5.19368915f },
  { -0.98078528f, 0.19509032f, -5.02733949f },
  { -0.97956977f, 0.20110463f, -4.87094575f },
  { -0.97831737f, 0.20711138f, -4.72362933f },
  { -0.97702814f, 0.21311032f, -4.58461206f },
  { -0.97570213f, 0.21910124f, -4.45320222f },
  { -0.97433938f, 0.22508391f, -4.32878288f },
  { -0.97293995f, 0.23105811f, -4.21080203f },
  { -0.97150389f, 0.23702361f, -4.09876429f },
  { -0.97003125f, 0.24298018f, -3.99222378f },
  { -0.96852209f, 0.24892761f, -3.89077817f },
  { -0.96697647f, 0.25486566f, -3.79406340f },
  { -0.96539444f, 0.26079412f, -3.70174929f },
  { -0.96377607f, 0.26671276f, -3.61353568f },
  { -0.96212140f, 0.27262136f, -3.52914907f },
  { -0.96043052f, 0.27851969f, -3.44833976f },
  { -0.95870347f, 0.28440754f, -3.37087928f },
  { -0.95694034f, 0.29028468f, -3.29655821f },
  { -0.95514117f, 0.29615089f, -3.22518421f },
  { -0.95330604f, 0.30200595f, -3.15658033f },
  { -0.95143502f, 0.30784964f, -3.09058351f },
  { -0.94952818f, 0.31368174f, -3.02704320f },
  { -0.94758559f, 0.31950203f, -2.96582024f },
  { -0.94560733f, 0.32531029f, -2.90678576f },
  { -0.94359346f, 0.33110631f, -2.84982026f },
  { -0.94154407f, 0.33688985f, -2.79481277f },
  { -0.93945922f, 0.34266072f, -2.74166012f },
  { -0.93733901f, 0.34841868f, -2.69026624f },
  { -0.93518351f, 0.35416353f, -2.64054157f },
  { -0.93299280f, 0.35989504f, -2.59240252f },
  { -0.93076696f, 0.36561300f, -2.54577098f },
  { -0.92850608f, 0.37131719f, -2.50057389f },
  { -0.92621024f, 0.37700741f, -2.45674280f },
  { -0.92387953f, 0.38268343f, -2.41421356f },
  { -0.92151404f, 0.38834505f, -2.37292595f },
  { -0.91911385f, 0.39399204f, -2.33282340f },
  { -0.91667906f, 0.39962420f, -2.29385273f },
  { -0.91420976f, 0.40524131f, -2.25596385f },
  { -0.91170603f, 0.41084317f, -2.21910962f },
  { -0.90916798f, 0.41642956f, -2.18324555f },
  { -0.90659570f, 0.42200027f, -2.14832967f },
  { -0.90398929f, 0.42755509f, -2.11432236f },
  { -0.90134885f, 0.43309382f, -2.08118613f },
  { -0.89867447f, 0.43861624f, -2.04888553f },
  { -0.89596625f, 0.44412214f, -2.01738702f },
  { -0.89322430f, 0.44961133f, -1.98665879f },
  { -0.89044872f, 0.45508359f, -1.95667070f },
  { -0.88763962f, 0.46053871f, -1.92739416f },
  { -0.88479710f, 0.46597650f, -1.89880199f },
  { -0.88192126f, 0.47139674f, -1.87086841f },
  { -0.87901223f, 0.47679923f, -1.84356889f },
  { -0.87607009f, 0.48218377f, -1.81688009f },
  { -0.87309498f, 0.48755016f, -1.79077980f },
  { -0.87008699f, 0.49289819f, -1.76524687f },
  { -0.86704625f, 0.49822767f, -1.74026114f },
  { -0.86397286f, 0.50353838f, -1.71580337f },
  { -0.86086694f, 0.50883014f, -1.69185523f },
  { -0.85772861f, 0.51410274f, -1.66839921f },
  { -0.85455799f, 0.51935599f, -1.64541857f },
  { -0.85135519f, 0.52458968f, -1.62289733f },
  { -0.84812034f, 0.52980362f, -1.60082020f },
  { -0.84485357f, 0.53499762f, -1.57917257f },
  { -0.84155498f, 0.54017147f, -1.55794043f },
  { -0.83822471f, 0.54532499f, -1.53711039f },
  { -0.83486287f, 0.55045797f, -1.51666960f },
  { -0.83146961f, 0.55557023f, -1.49660576f },
  { -0.82804505f, 0.56066158f, -1.47690707f },
  { -0.82458930f, 0.56573181f, -1.45756220f },
  { -0.82110251f, 0.57078075f, -1.43856029f },
  { -0.81758481f, 0.57580819f, -1.41989090f },
  { -0.81403633f, 0.58081396f, -1.40154402f },
  { -0.81045720f, 0.58579786f, -1.38351001f },
  { -0.80684755f, 0.59075970f, -1.36577961f },
  { -0.80320753f, 0.59569930f, -1.34834391f },
  { -0.79953727f, 0.60061648f, -1.33119436f },
  { -0.79583690f, 0.60551104f, -1.31432270f },
  { -0.79210658f, 0.61038281f, -1.29772099f },
  { -0.78834643f, 0.61523159f, -1.28138158f },
  { -0.78455660f, 0.62005721f, -1.26529711f },
  { -0.78073723f, 0.62485949f, -1.24946047f },
  { -0.77688847f, 0.62963824f, -1.23386481f },
  { -0.77301045f, 0.63439328f, -1.21850353f },
  { -0.76910334f, 0.63912444f, -1.20337024f },
  { -0.76516727f, 0.64383154f, -1.18845880f },
  { -0.76120239f, 0.64851440f, -1.17376327f },
  { -0.75720885f, 0.65317284f, -1.15927791f },
  { -0.75318680f, 0.65780669f, -1.14499717f },
  { -0.74913639f, 0.66241578f, -1.13091569f },
  { -0.74505779f, 0.66699992f, -1.11702829f },
  { -0.74095113f, 0.67155895f, -1.10332998f },
  { -0.73681657f, 0.67609270f, -1.08981589f },
  { -0.73265427f, 0.68060100f, -1.07648134f },
  { -0.72846439f, 0.68508367f, -1.06332179f },
  { -0.72424708f, 0.68954054f, -1.05033285f },
  { -0.72000251f, 0.69397146f, -1.03751026f },
  { -0.71573083f, 0.69837625f, -1.02484989f },
  { -0.71143220f, 0.70275474f, -1.01234777f },
  { -0.70710678f, 0.70710678f, -1.00000000f },
  { -0.70275474f, 0.71143220f, -0.98780284f },
  { -0.69837625f, 0.71573083f, -0.97575265f },
  { -0.69397146f, 0.72000251f, -0.96384589f },
  { -0.68954054f, 0.72424708f, -0.95207915f },
  { -0.68508367f, 0.72846439f, -0.94044908f },
  { -0.68060100f, 0.73265427f, -0.92895247f },
  { -0.67609270f, 0.73681657f, -0.91758618f },
  { -0.67155895f, 0.74095113f, -0.90634717f },
  { -0.66699992f, 0.74505779f, -0.89523247f },
  { -0.66241578f, 0.74913639f, -0.88423922f },
  { -0.65780669f, 0.75318680f, -0.87336461f },
  { -0.65317284f, 0.75720885f, -0.86260593f },
  { -0.64851440f, 0.76120239f, -0.85196055f },
  { -0.64383154f, 0.76516727f, -0.84142588f },
  { -0.63912444f, 0.76910334f, -0.83099944f },
  { -0.63439328f, 0.77301045f, -0.82067879f },
  { -0.62963824f, 0.77688847f, -0.81046156f },
  { -0.62485949f, 0.78073723f, -0.80034545f },
  { -0.62005721f, 0.78455660f, -0.79032821f },
  { -0.61523159f, 0.78834643f, -0.78040766f },
  { -0.61038281f, 0.79210658f, -0.77058167f },
  { -0.60551104f, 0.79583690f, -0.76084816f },
  { -0.60061648f, 0.79953727f, -0.75120511f },
  { -0.59569930f, 0.80320753f, -0.74165055f },
  { -0.59075970f, 0.80684755f, -0.73218255f },
  { -0.58579786f, 0.81045720f, -0.72279925f },
  { -0.58081396f, 0.81403633f, -0.71349882f },
  { -0.57580819f, 0.81758481f, -0.70427946f },
  { -0.57078075f, 0.82110251f, -0.69513944f },
  { -0.56573181f, 0.82458930f, -0.68607707f },
  { -0.56066158f, 0.82804505f, -0.67709067f },
  { -0.55557023f, 0.83146961f, -0.66817864f },
  { -0.55045797f, 0.83486287f, -0.65933938f },
  { -0.54532499f, 0.83822471f, -0.65057136f },
  { -0.54017147f, 0.84155498f, -0.64187306f },
  { -0.53499762f, 0.84485357f, -0.63324302f },
  { -0.52980362f, 0.84812034f, -0.62467977f },
  { -0.52458968f, 0.85135519f, -0.61618193f },
  { -0.51935599f, 0.85455799f, -0.60774810f },
  { -0.51410274f, 0.85772861f, -0.59937693f },
  { -0.50883014f, 0.86086694f, -0.59106712f },
  { -0.50353838f, 0.86397286f, -0.58281737f },
  { -0.49822767f, 0.86704625f, -0.57462640f },
  { -0.49289819f, 0.87008699f, -0.56649300f },
  { -0.48755016f, 0.87309498f, -0.55841595f },
  { -0.48218377f, 0.87607009f, -0.55039406f },
  { -0.47679923f, 0.87901223f, -0.54242616f },
  { -0.47139674f, 0.88192126f, -0.53451114f },
  { -0.46597650f, 0.88479710f, -0.52664786f },
  { -0.46053871f, 0.88763962f, -0.51883523f },
  { -0.45508359f, 0.89044872f, -0.51107220f },
  { -0.44961133f, 0.89322430f, -0.50335770f },
  { -0.44412214f, 0.89596625f, -0.49569071f },
  { -0.43861624f, 0.89867447f, -0.48807021f },
  { -0.43309382f, 0.90134885f, -0.48049523f },
  { -0.42755509f, 0.90398929f, -0.47296478f },
  { -0.42200027f, 0.90659570f, -0.46547791f },
  { -0.41642956f, 0.90916798f, -0.45803368f },
  { -0.41084317f, 0.91170603f, -0.45063119f },
  { -0.40524131f, 0.91420976f, -0.44326951f },
  { -0.39962420f, 0.91667906f, -0.43594778f },
  { -0.39399204f, 0.91911385f, -0.42866511f },
  { -0.38834505f, 0.92151404f, -0.42142065f },
  { -0.38268343f, 0.92387953f, -0.41421356f },
  { -0.37700741f, 0.92621024f, -0.40704302f },
  { -0.37131719f, 0.92850608f, -0.39990820f },
  { -0.36561300f, 0.93076696f, -0.39280831f },
  { -0.35989504f, 0.93299280f, -0.38574257f },
  { -0.35416353f, 0.93518351f, -0.37871019f },
  { -0.34841868f, 0.93733901f, -0.37171042f },
  { -0.34266072f, 0.93945922f, -0.36474251f },
  { -0.33688985f, 0.94154407f, -0.35780572f },
  { -0.33110631f, 0.94359346f, -0.35089932f },
  { -0.32531029f, 0.94560733f, -0.34402260f },
  { -0.31950203f, 0.94758559f, -0.33717485f },
  { -0.31368174f, 0.94952818f, -0.33035538f },
  { -0.30784964f, 0.95143502f, -0.32356349f },
  { -0.30200595f, 0.95330604f, -0.31679853f },
  { -0.29615089f, 0.95514117f, -0.31005981f },
  { -0.29028468f, 0.95694034f, -0.30334668f },
  { -0.28440754f, 0.95870347f, -0.29665850f },
  { -0.27851969f, 0.96043052f, -0.28999463f },
  { -0.27262136f, 0.96212140f, -0.28335442f },
  { -0.26671276f, 0.96377607f, -0.27673727f },
  { -0.26079412f, 0.96539444f, -0.27014255f },
  { -0.25486566f, 0.96697647f, -0.26356966f },
  { -0.24892761f, 0.96852209f, -0.25701799f },
  { -0.24298018f, 0.97003125f, -0.25048696f },
  { -0.23702361f, 0.97150389f, -0.24397597f },
  { -0.23105811f, 0.97293995f, -0.23748445f },
  { -0.22508391f, 0.97433938f, -0.23101182f },
  { -0.21910124f, 0.97570213f, -0.22455751f },
  { -0.21311032f, 0.97702814f, -0.21812096f },
  { -0.20711138f, 0.97831737f, -0.21170162f },
  { -0.20110463f, 0.97956977f, -0.20529894f },
  { -0.19509032f, 0.98078528f, -0.19891237f },
  { -0.18906866f, 0.98196387f, -0.19254137f },
  { -0.18303989f, 0.98310549f, -0.18618540f },
  { -0.17700422f, 0.98421009f, -0.17984394f },
  { -0.17096189f, 0.98527764f, -0.17351646f },
  { -0.16491312f, 0.98630810f, -0.16720244f },
  { -0.15885814f, 0.98730142f, -0.16090136f },
  { -0.15279719f, 0.98825757f, -0.15461271f },
  { -0.14673047f, 0.98917651f, -0.14833599f },
  { -0.14065824f, 0.99005821f, -0.14207068f },
  { -0.13458071f, 0.99090264f, -0.13581628f },
  { -0.12849811f, 0.99170975f, -0.12957230f },
  { -0.12241068f, 0.99247953f, -0.12333824f },
  { -0.11631863f, 0.99321195f, -0.11711360f },
  { -0.11022221f, 0.99390697f, -0.11089791f },
  { -0.10412163f, 0.99456457f, -0.10469067f },
  { -0.09801714f, 0.99518473f, -0.09849140f },
  { -0.09190896f, 0.99576741f, -0.09229962f },
  { -0.08579731f, 0.99631261f, -0.08611485f },
  { -0.07968244f, 0.99682030f, -0.07993661f },
  { -0.07356456f, 0.99729046f, -0.07376443f },
  { -0.06744392f, 0.99772307f, -0.06759784f },
  { -0.06132074f, 0.99811811f, -0.06143635f },
  { -0.05519524f, 0.99847558f, -0.05527951f },
  { -0.04906767f, 0.99879546f, -0.04912685f },
  { -0.04293826f, 0.99907773f, -0.04297789f },
  { -0.03680722f, 0.99932238f, -0.03683218f },
  { -0.03067480f, 0.99952942f, -0.03068924f },
  { -0.02454123f, 0.99969882f, -0.02454862f },
  { -0.01840673f, 0.99983058f, -0.01840985f },
  { -0.01227154f, 0.99992470f, -0.01227246f },
  { -0.00613588f, 0.99998118f, -0.00613600f },
  { -0.00000000f, 1.00000000f, -0.00000000f }
};

// Inverse trigonometric table. Each row is asin/acos/atan, in radians.
float const INV_TRIG_TABLE[NUM_INV_TRIG_STEPS + 1][3] = {
  {0.000000f, 1.570796f, 0.000000f},
  {0.001953f, 1.568843f, 0.001953f},
  {0.003906f, 1.566890f, 0.003906f},
  {0.005859f, 1.564937f, 0.005859f},
  {0.007813f, 1.562984f, 0.007812f},
  {0.009766f, 1.561031f, 0.009765f},
  {0.011719f, 1.559077f, 0.011718f},
  {0.013672f, 1.557124f, 0.013671f},
  {0.015626f, 1.555171f, 0.015624f},
  {0.017579f, 1.553217f, 0.017576f},
  {0.019532f, 1.551264f, 0.019529f},
  {0.021486f, 1.549310f, 0.021481f},
  {0.023440f, 1.547357f, 0.023433f},
  {0.025393f, 1.545403f, 0.025385f},
  {0.027347f, 1.543449f, 0.027337f},
  {0.029301f, 1.541495f, 0.029288f},
  {0.031255f, 1.539541f, 0.031240f},
  {0.033209f, 1.537587f, 0.033191f},
  {0.035163f, 1.535633f, 0.035142f},
  {0.037118f, 1.533678f, 0.037092f},
  {0.039072f, 1.531724f, 0.039043f},
  {0.041027f, 1.529769f, 0.040993f},
  {0.042982f, 1.527814f, 0.042942f},
  {0.044937f, 1.525859f, 0.044892f},
  {0.046892f, 1.523904f, 0.046841f},
  {0.048848f, 1.521949f, 0.048789f},
  {0.050803f, 1.519993f, 0.050738f},
  {0.052759f, 1.518037f, 0.052686f},
  {0.054715f, 1.516082f, 0.054633f},
  {0.056671f, 1.514125f, 0.056580f},
  {0.058627f, 1.512169f, 0.058527f},
  {0.060584f, 1.510212f, 0.060473f},
  {0.062541f, 1.508256f, 0.062419f},
  {0.064498f, 1.506298f, 0.064364f},
  {0.066455f, 1.504341f, 0.066309f},
  {0.068413f, 1.502384f, 0.068253f},
  {0.070371f, 1.500426f, 0.070197f},
  {0.072329f, 1.498468f, 0.072140f},
  {0.074287f, 1.496509f, 0.074083f},
  {0.076246f, 1.494551f, 0.076025f},
  {0.078205f, 1.492592f, 0.077967f},
  {0.080164f, 1.490632f, 0.079908f},
  {0.082124f, 1.488673f, 0.081848f},
  {0.084083f, 1.486713f, 0.083788f},
  {0.086044f, 1.484753f, 0.085727f},
  {0.088004f, 1.482792f, 0.087665f},
  {0.089965f, 1.480831f, 0.089603f},
  {0.091926f, 1.478870f, 0.091540f},
  {0.093888f, 1.476908f, 0.093477f},
  {0.095850f, 1.474947f, 0.095413f},
  {0.097812f, 1.472984f, 0.097348f},
  {0.099775f, 1.471021f, 0.099282f},
  {0.101738f, 1.469058f, 0.101215f},
  {0.103701f, 1.467095f, 0.103148f},
  {0.105665f, 1.465131f, 0.105080f},
  {0.107630f, 1.463167f, 0.107012f},
  {0.109594f, 1.461202f, 0.108942f},
  {0.111559f, 1.459237f, 0.110872f},
  {0.113525f, 1.457271f, 0.112800f},
  {0.115491f, 1.455305f, 0.114728f},
  {0.117457f, 1.453339f, 0.116655f},
  {0.119424f, 1.451372f, 0.118582f},
  {0.121392f, 1.449405f, 0.120507f},
  {0.123360f, 1.447437f, 0.122431f},
  {0.125328f, 1.445468f, 0.124355f},
  {0.127297f, 1.443500f, 0.126278f},
  {0.129266f, 1.441530f, 0.128199f},
  {0.131236f, 1.439561f, 0.130120f},
  {0.133206f, 1.437590f, 0.132040f},
  {0.135177f, 1.435619f, 0.133959f},
  {0.137148f, 1.433648f, 0.135876f},
  {0.139120f, 1.431676f, 0.137793f},
  {0.141093f, 1.429704f, 0.139709f},
  {0.143066f, 1.427731f, 0.141624f},
  {0.145039f, 1.425757f, 0.143537f},
  {0.147013f, 1.423783f, 0.145450f},
  {0.148988f, 1.421808f, 0.147361f},
  {0.150963f, 1.419833f, 0.149272f},
  {0.152939f, 1.417857f, 0.151181f},
  {0.154916f, 1.415881f, 0.153090f},
  {0.156893f, 1.413903f, 0.154997f},
  {0.158871f, 1.411926f, 0.156903f},
  {0.160849f, 1.409947f, 0.158808f},
  {0.162828f, 1.407968f, 0.160711f},
  {0.164808f, 1.405989f, 0.162614f},
  {0.166788f, 1.404008f, 0.164515f},
  {0.168769f, 1.402028f, 0.166415f},
  {0.170750f, 1.400046f, 0.168314f},
  {0.172733f, 1.398064f, 0.170212f},
  {0.174716f, 1.396081f, 0.172108f},
  {0.176699f, 1.394097f, 0.174004f},
  {0.178684f, 1.392113f, 0.175898f},
  {0.180669f, 1.390128f, 0.177790f},
  {0.182655f, 1.388142f, 0.179682f},
  {0.184641f, 1.386155f, 0.181572f},
  {0.186628f, 1.384168f, 0.183460f},
  {0.188616f, 1.382180f, 0.185348f},
  {0.190605f, 1.380191f, 0.187234f},
  {0.192595f, 1.378202f, 0.189119f},
  {0.194585f, 1.376211f, 0.191002f},
  {0.196576f, 1.374220f, 0.192884f},
  {0.198568f, 1.372228f, 0.194765f},
  {0.200561f, 1.370236f, 0.196644f},
  {0.202554f, 1.368242f, 0.198522f},
  {0.204548f, 1.366248f, 0.200399f},
  {0.206544f, 1.364253f, 0.202274f},
  {0.208539f, 1.362257f, 0.204147f},
  {0.210536f, 1.360260f, 0.206019f},
  {0.212534f, 1.358262f, 0.207890f},
  {0.214532f, 1.356264f, 0.209759f},
  {0.216532f, 1.354264f, 0.211627f},
  {0.218532f, 1.352264f, 0.213493f},
  {0.220533f, 1.350263f, 0.215358f},
  {0.222535f, 1.348261f, 0.217221f},
  {0.224538f, 1.346258f, 0.219083f},
  {0.226542f, 1.344254f, 0.220943f},
  {0.228547f, 1.342249f, 0.222801f},
  {0.230553f, 1.340244f, 0.224658f},
  {0.232559f, 1.338237f, 0.226514f},
  {0.234567f, 1.336229f, 0.228367f},
  {0.236576f, 1.334221f, 0.230220f},
  {0.238585f, 1.332211f, 0.232070f},
  {0.240596f, 1.330201f, 0.233919f},
  {0.242607f, 1.328189f, 0.235767f},
  {0.244620f, 1.326176f, 0.237612f},
  {0.246633f, 1.324163f, 0.239456f},
  {0.248648f, 1.322148f, 0.241299f},
  {0.250664f, 1.320133f, 0.243140f},
  {0.252680f, 1.318116f, 0.244979f},
  {0.254698f, 1.316098f, 0.246816f},
  {0.256717f, 1.314080f, 0.248652f},
  {0.258737f, 1.312060f, 0.250486f},
  {0.260757f, 1.310039f, 0.252318f},
  {0.262779f, 1.308017f, 0.254149f},
  {0.264803f, 1.305994f, 0.255977f},
  {0.266827f, 1.303970f, 0.257804f},
  {0.268852f, 1.301944f, 0.259630f},
  {0.270879f, 1.299918f, 0.261453f},
  {0.272906f, 1.297890f, 0.263275f},
  {0.274935f, 1.295861f, 0.265095f},
  {0.276965f, 1.293831f, 0.266913f},
  {0.278996f, 1.291800f, 0.268729f},
  {0.281028f, 1.289768f, 0.270544f},
  {0.283062f, 1.287735f, 0.272357f},
  {0.285096f, 1.285700f, 0.274167f},
  {0.287132f, 1.283664f, 0.275976f},
  {0.289169f, 1.281627f, 0.277784f},
  {0.291208f, 1.279589f, 0.279589f},
  {0.293247f, 1.277549f, 0.281392f},
  {0.295288f, 1.275508f, 0.283194f},
  {0.297330f, 1.273466f, 0.284994f},
  {0.299374f, 1.271423f, 0.286791f},
  {0.301418f, 1.269378f, 0.288587f},
  {0.303464f, 1.267332f, 0.290381f},
  {0.305512f, 1.265285f, 0.292173f},
  {0.307560f, 1.263236f, 0.293964f},
  {0.309610f, 1.261186f, 0.295752f},
  {0.311662f, 1.259135f, 0.297538f},
  {0.313714f, 1.257082f, 0.299322f},
  {0.315768f, 1.255028f, 0.301105f},
  {0.317824f, 1.252973f, 0.302885f},
  {0.319881f, 1.250916f, 0.304663f},
  {0.321939f, 1.248858f, 0.306440f},
  {0.323998f, 1.246798f, 0.308214f},
  {0.326059f, 1.244737f, 0.309986f},
  {0.328122f, 1.242675f, 0.311757f},
  {0.330186f, 1.240611f, 0.313525f},
  {0.332251f, 1.238545f, 0.315291f},
  {0.334318f, 1.236478f, 0.317056f},
  {0.336386f, 1.234410f, 0.318818f},
  {0.338456f, 1.232340f, 0.320578f},
  {0.340528f, 1.230269f, 0.322336f},
  {0.342600f, 1.228196f, 0.324092f},
  {0.344675f, 1.226122f, 0.325846f},
  {0.346751f, 1.224046f, 0.327598f},
  {0.348828f, 1.221968f, 0.329348f},
  {0.350907f, 1.219889f, 0.331096f},
  {0.352988f, 1.217808f, 0.332842f},
  {0.355070f, 1.215726f, 0.334585f},
  {0.357154f, 1.213642f, 0.336327f},
  {0.359240f, 1.211557f, 0.338066f},
  {0.361327f, 1.209470f, 0.339803f},
  {0.363416f, 1.207381f, 0.341538f},
  {0.365506f, 1.205290f, 0.343271f},
  {0.367598f, 1.203198f, 0.345002f},
  {0.369692f, 1.201104f, 0.346731f},
  {0.371787f, 1.199009f, 0.348457f},
  {0.373885f, 1.196912f, 0.350182f},
  {0.375983f, 1.194813f, 0.351904f},
  {0.378084f, 1.192712f, 0.353624f},
  {0.380187f, 1.190610f, 0.355342f},
  {0.382291f, 1.188506f, 0.357057f},
  {0.384397f, 1.186400f, 0.358771f},
  {0.386505f, 1.184292f, 0.360482f},
  {0.388614f, 1.182182f, 0.362191f},
  {0.390726f, 1.180071f, 0.363898f},
  {0.392839f, 1.177958f, 0.365602f},
  {0.394954f, 1.175842f, 0.367305f},
  {0.397071f, 1.173725f, 0.369005f},
  {0.399190f, 1.171607f, 0.370703f},
  {0.401310f, 1.169486f, 0.372398f},
  {0.403433f, 1.167363f, 0.374092f},
  {0.405558f, 1.165239f, 0.375783f},
  {0.407684f, 1.163112f, 0.377472f},
  {0.409813f, 1.160984f, 0.379159f},
  {0.411943f, 1.158853f, 0.380843f},
  {0.414076f, 1.156721f, 0.382525f},
  {0.416210f, 1.154586f, 0.384205f},
  {0.418346f, 1.152450f, 0.385883f},
  {0.420485f, 1.150311f, 0.387558f},
  {0.422625f, 1.148171f, 0.389231f},
  {0.424768f, 1.146028f, 0.390902f},
  {0.426913f, 1.143884f, 0.392570f},
  {0.429059f, 1.141737f, 0.394236f},
  {0.431208f, 1.139588f, 0.395900f},
  {0.433359f, 1.137437f, 0.397562f},
  {0.435512f, 1.135284f, 0.399221f},
  {0.437668f, 1.133129f, 0.400878f},
  {0.439825f, 1.130971f, 0.402532f},
  {0.441985f, 1.128812f, 0.404184f},
  {0.444147f, 1.126650f, 0.405834f},
  {0.446311f, 1.124486f, 0.407482f},
  {0.448477f, 1.122319f, 0.409127f},
  {0.450646f, 1.120151f, 0.410770f},
  {0.452817f, 1.117980f, 0.412410f},
  {0.454990f, 1.115807f, 0.414049f},
  {0.457165f, 1.113631f, 0.415684f},
  {0.459343f, 1.111453f, 0.417318f},
  {0.461523f, 1.109273f, 0.418949f},
  {0.463706f, 1.107091f, 0.420578f},
  {0.465891f, 1.104906f, 0.422204f},
  {0.468078f, 1.102718f, 0.423828f},
  {0.470268f, 1.100529f, 0.425450f},
  {0.472460f, 1.098336f, 0.427069f},
  {0.474655f, 1.096142f, 0.428686f},
  {0.476852f, 1.093945f, 0.430300f},
  {0.479051f, 1.091745f, 0.431912f},
  {0.481253f, 1.089543f, 0.433522f},
  {0.483458f, 1.087338f, 0.435129f},
  {0.485665f, 1.085131f, 0.436734f},
  {0.487875f, 1.082921f, 0.438337f},
  {0.490088f, 1.080709f, 0.439937f},
  {0.492303f, 1.078494f, 0.441534f},
  {0.494520f, 1.076276f, 0.443130f},
  {0.496740f, 1.074056f, 0.444722f},
  {0.498963f, 1.071833f, 0.446313f},
  {0.501189f, 1.069607f, 0.447901f},
  {0.503418f, 1.067379f, 0.449486f},
  {0.505649f, 1.065148f, 0.451070f},
  {0.507883f, 1.062914f, 0.452650f},
  {0.510119f, 1.060677f, 0.454229f},
  {0.512359f, 1.058438f, 0.455805f},
  {0.514601f, 1.056195f, 0.457378f},
  {0.516846f, 1.053950f, 0.458949f},
  {0.519094f, 1.051702f, 0.460518f},
  {0.521345f, 1.049451f, 0.462084f},
  {0.523599f, 1.047198f, 0.463648f},
  {0.525856f, 1.044941f, 0.465209f},
  {0.528115f, 1.042681f, 0.466768f},
  {0.530378f, 1.040418f, 0.468324f},
  {0.532644f, 1.038153f, 0.469878f},
  {0.534912f, 1.035884f, 0.471430f},
  {0.537184f, 1.033612f, 0.472979f},
  {0.539459f, 1.031337f, 0.474525f},
  {0.541737f, 1.029059f, 0.476069f},
  {0.544018f, 1.026778f, 0.477611f},
  {0.546302f, 1.024494f, 0.479150f},
  {0.548590f, 1.022207f, 0.480687f},
  {0.550880f, 1.019916f, 0.482221f},
  {0.553174f, 1.017622f, 0.483753f},
  {0.555471f, 1.015325f, 0.485283f},
  {0.557772f, 1.013025f, 0.486809f},
  {0.560075f, 1.010721f, 0.488334f},
  {0.562382f, 1.008414f, 0.489856f},
  {0.564693f, 1.006104f, 0.491375f},
  {0.567006f, 1.003790f, 0.492893f},
  {0.569324f, 1.001473f, 0.494407f},
  {0.571644f, 0.999152f, 0.495919f},
  {0.573968f, 0.996828f, 0.497429f},
  {0.576296f, 0.994500f, 0.498936f},
  {0.578627f, 0.992169f, 0.500441f},
  {0.580962f, 0.989835f, 0.501943f},
  {0.583300f, 0.987496f, 0.503443f},
  {0.585642f, 0.985154f, 0.504940f},
  {0.587987f, 0.982809f, 0.506435f},
  {0.590337f, 0.980460f, 0.507927f},
  {0.592689f, 0.978107f, 0.509417f},
  {0.595046f, 0.975750f, 0.510905f},
  {0.597406f, 0.973390f, 0.512389f},
  {0.599771f, 0.971026f, 0.513872f},
  {0.602139f, 0.968658f, 0.515352f},
  {0.604510f, 0.966286f, 0.516829f},
  {0.606886f, 0.963910f, 0.518304f},
  {0.609266f, 0.961530f, 0.519777f},
  {0.611650f, 0.959147f, 0.521247f},
  {0.614037f, 0.956759f, 0.522715f},
  {0.616429f, 0.954367f, 0.524180f},
  {0.618825f, 0.951972f, 0.525642f},
  {0.621224f, 0.949572f, 0.527102f},
  {0.623628f, 0.947168f, 0.528560f},
  {0.626036f, 0.944760f, 0.530015f},
  {0.628449f, 0.942348f, 0.531468f},
  {0.630865f, 0.939931f, 0.532918f},
  {0.633286f, 0.937510f, 0.534366f},
  {0.635711f, 0.935085f, 0.535811f},
  {0.638141f, 0.932656f, 0.537254f},
  {0.640575f, 0.930222f, 0.538694f},
  {0.643013f, 0.927783f, 0.540132f},
  {0.645456f, 0.925341f, 0.541568f},
  {0.647903f, 0.922893f, 0.543001f},
  {0.650355f, 0.920442f, 0.544431f},
  {0.652811f, 0.917985f, 0.545859f},
  {0.655272f, 0.915524f, 0.547284f},
  {0.657738f, 0.913059f, 0.548707f},
  {0.660208f, 0.910588f, 0.550128f},
  {0.662683f, 0.908113f, 0.551546f},
  {0.665163f, 0.905633f, 0.552962f},
  {0.667648f, 0.903148f, 0.554375f},
  {0.670137f, 0.900659f, 0.555785f},
  {0.672632f, 0.898164f, 0.557194f},
  {0.675132f, 0.895665f, 0.558599f},
  {0.677636f, 0.893160f, 0.560003f},
  {0.680146f, 0.890651f, 0.561403f},
  {0.682660f, 0.888136f, 0.562802f},
  {0.685180f, 0.885616f, 0.564198f},
  {0.687705f, 0.883091f, 0.565591f},
  {0.690235f, 0.880561f, 0.566982f},
  {0.692771f, 0.878025f, 0.568370f},
  {0.695312f, 0.875484f, 0.569756f},
  {0.697858f, 0.872938f, 0.571140f},
  {0.700410f, 0.870386f, 0.572521f},
  {0.702967f, 0.867829f, 0.573900f},
  {0.705530f, 0.865266f, 0.575276f},
  {0.708099f, 0.862698f, 0.576650f},
  {0.710673f, 0.860124f, 0.578021f},
  {0.713252f, 0.857544f, 0.579390f},
  {0.715838f, 0.854958f, 0.580756f},
  {0.718429f, 0.852367f, 0.582120f},
  {0.721027f, 0.849770f, 0.583482f},
  {0.723630f, 0.847166f, 0.584841f},
  {0.726239f, 0.844557f, 0.586198f},
  {0.728855f, 0.841942f, 0.587552f},
  {0.731476f, 0.839320f, 0.588904f},
  {0.734104f, 0.836693f, 0.590253f},
  {0.736737f, 0.834059f, 0.591600f},
  {0.739378f, 0.831419f, 0.592944f},
  {0.742024f, 0.828772f, 0.594286f},
  {0.744677f, 0.826119f, 0.595626f},
  {0.747337f, 0.823460f, 0.596963f},
  {0.750003f, 0.820794f, 0.598298f},
  {0.752675f, 0.818121f, 0.599630f},
  {0.755355f, 0.815442f, 0.600960f},
  {0.758041f, 0.812756f, 0.602287f},
  {0.760734f, 0.810063f, 0.603612f},
  {0.763434f, 0.807363f, 0.604935f},
  {0.766141f, 0.804656f, 0.606255f},
  {0.768855f, 0.801942f, 0.607573f},
  {0.771576f, 0.799221f, 0.608888f},
  {0.774304f, 0.796492f, 0.610201f},
  {0.777040f, 0.793757f, 0.611512f},
  {0.779783f, 0.791014f, 0.612820f},
  {0.782533f, 0.788263f, 0.614126f},
  {0.785291f, 0.785505f, 0.615429f},
  {0.788057f, 0.782739f, 0.616730f},
  {0.790830f, 0.779966f, 0.618029f},
  {0.793612f, 0.777185f, 0.619325f},
  {0.796401f, 0.774396f, 0.620619f},
  {0.799198f, 0.771599f, 0.621910f},
  {0.802003f, 0.768794f, 0.623199f},
  {0.804816f, 0.765980f, 0.624486f},
  {0.807638f, 0.763159f, 0.625770f},
  {0.810467f, 0.760329f, 0.627052f},
  {0.813306f, 0.757491f, 0.628332f},
  {0.816153f, 0.754644f, 0.629609f},
  {0.819008f, 0.751788f, 0.630883f},
  {0.821872f, 0.748924f, 0.632156f},
  {0.824745f, 0.746051f, 0.633426f},
  {0.827627f, 0.743169f, 0.634694f},
  {0.830519f, 0.740278f, 0.635959f},
  {0.833419f, 0.737377f, 0.637222f},
  {0.836328f, 0.734468f, 0.638482f},
  {0.839247f, 0.731549f, 0.639741f},
  {0.842176f, 0.728620f, 0.640996f},
  {0.845114f, 0.725682f, 0.642250f},
  {0.848062f, 0.722734f, 0.643501f},
  {0.851020f, 0.719776f, 0.644750f},
  {0.853988f, 0.716809f, 0.645996f},
  {0.856966f, 0.713831f, 0.647241f},
  {0.859954f, 0.710842f, 0.648482f},
  {0.862953f, 0.707844f, 0.649722f},
  {0.865962f, 0.704835f, 0.650959f},
  {0.868982f, 0.701815f, 0.652194f},
  {0.872012f, 0.698784f, 0.653426f},
  {0.875054f, 0.695742f, 0.654657f},
  {0.878107f, 0.692690f, 0.655884f},
  {0.881171f, 0.689625f, 0.657110f},
  {0.884246f, 0.686550f, 0.658333f},
  {0.887333f, 0.683463f, 0.659554f},
  {0.890432f, 0.680364f, 0.660773f},
  {0.893543f, 0.677253f, 0.661989f},
  {0.896666f, 0.674131f, 0.663203f},
  {0.899801f, 0.670995f, 0.664415f},
  {0.902948f, 0.667848f, 0.665624f},
  {0.906108f, 0.664688f, 0.666831f},
  {0.909281f, 0.661515f, 0.668036f},
  {0.912467f, 0.658329f, 0.669239f},
  {0.915666f, 0.655130f, 0.670439f},
  {0.918879f, 0.651918f, 0.671637f},
  {0.922105f, 0.648692f, 0.672833f},
  {0.925345f, 0.645452f, 0.674026f},
  {0.928598f, 0.642198f, 0.675217f},
  {0.931866f, 0.638930f, 0.676406f},
  {0.935149f, 0.635647f, 0.677593f},
  {0.938446f, 0.632350f, 0.678777f},
  {0.941758f, 0.629038f, 0.679959f},
  {0.945085f, 0.625711f, 0.681139f},
  {0.948428f, 0.622368f, 0.682317f},
  {0.951786f, 0.619010f, 0.683492f},
  {0.955160f, 0.615636f, 0.684665f},
  {0.958550f, 0.612246f, 0.685836f},
  {0.961957f, 0.608839f, 0.687004f},
  {0.965381f, 0.605416f, 0.688171f},
  {0.968821f, 0.601975f, 0.689335f},
  {0.972279f, 0.598517f, 0.690497f},
  {0.975754f, 0.595042f, 0.691657f},
  {0.979248f, 0.591549f, 0.692814f},
  {0.982759f, 0.588037f, 0.693969f},
  {0.986290f, 0.584507f, 0.695122f},
  {0.989839f, 0.580958f, 0.696273f},
  {0.993407f, 0.577389f, 0.697422f},
  {0.996995f, 0.573801f, 0.698568f},
  {1.000603f, 0.570193f, 0.699712f},
  {1.004232f, 0.566564f, 0.700854f},
  {1.007881f, 0.562915f, 0.701994f},
  {1.011552f, 0.559244f, 0.703132f},
  {1.015244f, 0.555552f, 0.704267f},
  {1.018959f, 0.551838f, 0.705400f},
  {1.022695f, 0.548101f, 0.706532f},
  {1.026455f, 0.544341f, 0.707660f},
  {1.030239f, 0.540558f, 0.708787f},
  {1.034046f, 0.536750f, 0.709912f},
  {1.037878f, 0.532918f, 0.711034f},
  {1.041735f, 0.529061f, 0.712154f},
  {1.045618f, 0.525179f, 0.713272f},
  {1.049526f, 0.521270f, 0.714388f},
  {1.053462f, 0.517334f, 0.715502f},
  {1.057425f, 0.513371f, 0.716613f},
  {1.061416f, 0.509380f, 0.717723f},
  {1.065436f, 0.505361f, 0.718830f},
  {1.069485f, 0.501311f, 0.719935f},
  {1.073564f, 0.497232f, 0.721038f},
  {1.077675f, 0.493122f, 0.722139f},
  {1.081816f, 0.488980f, 0.723238f},
  {1.085991f, 0.484805f, 0.724334f},
  {1.090199f, 0.480598f, 0.725429f},
  {1.094441f, 0.476356f, 0.726521f},
  {1.098718f, 0.472079f, 0.727611f},
  {1.103031f, 0.467765f, 0.728699f},
  {1.107381f, 0.463415f, 0.729785f},
  {1.111770f, 0.459026f, 0.730869f},
  {1.116198f, 0.454598f, 0.731951f},
  {1.120667f, 0.450130f, 0.733031f},
  {1.125177f, 0.445620f, 0.734108f},
  {1.129730f, 0.441067f, 0.735184f},
  {1.134327f, 0.436469f, 0.736257f},
  {1.138971f, 0.431826f, 0.737329f},
  {1.143661f, 0.427135f, 0.738398f},
  {1.148400f, 0.422396f, 0.739465f},
  {1.153190f, 0.417606f, 0.740530f},
  {1.158032f, 0.412764f, 0.741593f},
  {1.162929f, 0.407868f, 0.742654f},
  {1.167881f, 0.402915f, 0.743713f},
  {1.172892f, 0.397904f, 0.744770f},
  {1.177963f, 0.392833f, 0.745825f},
  {1.183097f, 0.387699f, 0.746878f},
  {1.188296f, 0.382500f, 0.747928f},
  {1.193564f, 0.377233f, 0.748977f},
  {1.198902f, 0.371894f, 0.750024f},
  {1.204314f, 0.366482f, 0.751068f},
  {1.209804f, 0.360992f, 0.752111f},
  {1.215375f, 0.355421f, 0.753151f},
  {1.221031f, 0.349765f, 0.754190f},
  {1.226776f, 0.344021f, 0.755226f},
  {1.232614f, 0.338182f, 0.756261f},
  {1.238551f, 0.332245f, 0.757293f},
  {1.244592f, 0.326204f, 0.758324f},
  {1.250743f, 0.320053f, 0.759352f},
  {1.257011f, 0.313786f, 0.760378f},
  {1.263401f, 0.307395f, 0.761403f},
  {1.269923f, 0.300873f, 0.762425f},
  {1.276585f, 0.294211f, 0.763446f},
  {1.283397f, 0.287399f, 0.764464f},
  {1.290370f, 0.280426f, 0.765480f},
  {1.297516f, 0.273281f, 0.766495f},
  {1.304848f, 0.265948f, 0.767507f},
  {1.312384f, 0.258413f, 0.768518f},
  {1.320141f, 0.250656f, 0.769526f},
  {1.328140f, 0.242656f, 0.770533f},
  {1.336407f, 0.234390f, 0.771538f},
  {1.344970f, 0.225827f, 0.772540f},
  {1.353865f, 0.216931f, 0.773541f},
  {1.363134f, 0.207662f, 0.774540f},
  {1.372831f, 0.197965f, 0.775537f},
  {1.383021f, 0.187776f, 0.776531f},
  {1.393789f, 0.177008f, 0.777524f},
  {1.405248f, 0.165548f, 0.778515f},
  {1.417553f, 0.153243f, 0.779504f},
  {1.430928f, 0.139868f, 0.780491f},
  {1.445715f, 0.125082f, 0.781477f},
  {1.462490f, 0.108306f, 0.782460f},
  {1.482379f, 0.088417f, 0.783441f},
  {1.508286f, 0.062510f, 0.784421f},
  {1.570796f, 0.000000f, 0.785398f}
};

} // namespace MathInternal
} // namespace Math
} // namespace Thea
